# # 1. 求 1-100 的和
# theSum = 0
# for i in range(1,101):
#     theSum += i
#
# print(theSum)
# # 2. 求 300-400 的和
# theSum = 0
# for i in range(300,401):
#     theSum += i
# print(theSum)
#
# #3. 求 1-1000 的和
# theSum = 0
# for i in range(1,1001):
#     theSum += i
# print(theSum)

#26
# 使用函数的方式来解决刚才的问题.
# 定义一个求和函数
# def calcSum(beg,end):
#     theSum = 0
#     for i in range(beg,end + 1):
#         theSum += i
#     print(theSum)

# 调用函数
# 求 1-100 的和
# calcSum(1,100)
# 300 - 400 的和
# calcSum(300,400)
# 求 1-1000 的和
# calcSum(1,1000)

# 27
# 先定义一个函数
# 如果只是定义，而不去调用，则函数体里面的代码就不会执行！
# def test():
#     print('hello')
#     print('hello')
#     print('hello')

# 函数调用才会真正执行函数体里面的代码。
# 函数经过一次定义之后，可以被调用多次！
# test()
# test()
# test()
# test()

#28
# def test(a,b,c):
#     print(a,b,c)
#
# test(10,20,30,40)#参数个数要一样。

#29
# def test(a):
#     print(a)
#
# test(10)
# test('hello')
# test(True)

# def add(x,y):
#     return x + y
#
# print(add(10,20))
# print(add(1.5,2.5))
# print(add('hello', 'world'))
# print(add(10, 'hello'))
# 30
# 求beg,end 这个范围的整数之和
# def calcSum(beg, end):
#     theSum = 0
#     for i in range(beg, end + 1):
#         theSum += i
#     return theSum
#
# result = calcSum(1, 100)
# print(result)

# code 31
# 这种情况不算是有多个 return 语句!
# def test():
#     return 1
#     return 2

# 一般多个 return 语句是搭配 分支语句 / 循环语句 的
# def isOdd(num):
#     """
#     用来判定 num 是不是奇数! 如果是奇数就返回 True, 不是就返回 False
#     :param num: 要判定的整数
#     :return: 返回 True False 表示是不是奇数
#     """
#     if num % 2 == 0:
#         return False
#     return True
#
# print(isOdd(10))
# print(isOdd(19))
#
# # 写一个函数, 返回平面上的一个点
# # 横坐标, 纵坐标
# def getPoint():
#     x = 10
#     y = 20
#     return x, y
#
#
# _, b = getPoint()
# print(_,b)

# 32
# def getPoint():
#     x = 10
#     y = 20
#     return x, y
#
# x, y = getPoint()
# print(x, y)

# 33
# x = 10
# def test():
#     x = 20
#     print(f'函数内部: {x}')
#
#
# test()
# print(f'函数外部: {x}')

# 34
# x = 10
# def test():
#     print(f'x = {x}')
#
#
# test()

# 使用这个函数, 把全局变量 x 给改成 20!
# def test():
#     global x
#     x = 20
#
# test()
# print(f'x = {x}')

# 35
# for i in range(1, 11):
#     print(i)
#
# print('-------------------')
# print(i)
#
# if True:
#     x = 10
#
# print(x)

# 36
# def test():
#     print('执行函数体代码')
#     print('执行函数体代码')
#     print('执行函数体代码')
#
#
# print("111111")
# test()
# print("222222")
# test()
# print("333333")
# test()
# print("444444")

# 37
# def isOdd(num):
#     if num % 2 == 0:
#         return False
#     return True
#
#
# def add(x, y):
#     return x + y
#

# result = isOdd(10)
# print(result)

# print(isOdd(add(5, 5))) #链式调用


# def test():
#     print('hello')
#
#
# test()

# 嵌套调用层次可以有很多层~

# def a():
#     num = 10
#     print('函数 a')
#
#
# def b():
#     num = 20
#     a()
#     print('函数 b')
#
#
# def c():
#     num = 30
#     b()
#     print('函数 c')
#
#
# def d():
#     num = 40
#     c()
#     print('函数 d')
#
# d()

# 39
# 写一个函数, 来求 n 的阶乘(n 是正整数)
# def factor(n):
#     result = 1
#     for i in range(1, n + 1):
#         result *= i
#     return result
#
# # n! => n * (n - 1)!
# # 1! => 1
# def factor(n):
#     if n == 1:
#         return 1
#     return n * factor(n + 1)
#
# print(factor(5))
#40
# 多个带有默认参数的形参,这些都得放在后面！！！
# def add(x, debug=False,y):
#     if debug:
#         print(f'x = {x}, y = {y}')
#     return x + y
#
# result = add(10, True, 20)
# print(result)

# 40
# def add(x, y, debug=False):
#     if debug:
#         print(f'x = {x}, y = {y}')
#     return x + y
#
# result = add(10, 20, True)
# print(result)

# 41
# def test(x, y):
#     print(f'x = {x}')
#     print(f'y = {y}')
#
#
# test(x=10, y=20)
# test(y=100, x=20)
#如果你写成 test(y=100, x=20)，C 语言会报错，因为它不支持关键字参数。
# 在 Python 中，函数调用时可以使用关键字参数，即显式指定参数名，这时参数的顺序不影响赋值。
# test(y=100, x=20) 和 test(x=20, y=100) 是完全等价的，Python 会根据名字匹配值，而不是顺序。

#如果你想让 Python 像 C 语言那样按顺序传参，可以这样写：
# test(20, 100)  # x=20, y=100